// 整个项目的请求方法所在的文件
// axios相关  req  res  =>   给外部提供数据

axios.defaults.baseURL = `http://ajax.frontend.itheima.net`

const { layer } = window.layui

// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么

    if (!config.url.startsWith('/api')) {
      const AUTH_TOKEN = window.localStorage.getItem('token')
      config.headers['Authorization'] = AUTH_TOKEN
    }

    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
// .then之前
axios.interceptors.response.use(
  function (response) {
    // response=>res
    // console.log('res的拦截器进来了-----------',response)
    // ?? 处理所有请求对应的res结果=>  if status  弹窗
    const { status, message } = response.data
    layer.msg(message)
    if (status === 0) {
      // console.log('token没失效 正确的可用res');
    }
    // Warning=====================status 403开头
    if (status === 1) {
      window.localStorage.removeItem('token')
      // 下面代码: 父页面跳转
      // window.location.href = '/login.html'
      window.parent.location.href = '/login.html'
      // parent.location.href = '/login.html'
    }
    // 对响应数据做点什么
    return response
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

const postReguser = (dataStr, cb) => {
  axios.post(`/api/reguser`, dataStr).then((res) => {
    cb(res)
  })
}

const postLogin = (dataStr, cb) => {
  axios.post(`/api/login`, dataStr).then((res) => {
    cb(res)
  })
}

// 获取用户信息
// 该请求的接口文档=>  设置header请求头
// -> Authorization:token值
const getInfoUser = (cb) => {
  axios.get(`/my/userinfo`).then((res) => {
    cb(res)
  })
}

// 修改用户信息

const postUpdateUserInfo = (data, cb) => {
  axios.post(`/my/userinfo`, data).then((res) => {
    cb(res)
  })
}

// 重置密码
const postResetPwd = (data, cb) => {
  axios.post(`/my/updatepwd`, data).then((res) => {
    cb(res)
  })
}

// 更换头像
// "avatar=base64格式的字符串"
const postAvatar = (data, cb) => {
  axios.post(`/my/update/avatar`, data).then((res) => {
    cb(res)
  })
}

// 文章分类列表
const getCateList = (cb) => {
  axios.get(`/my/article/cates`).then((res) => {
    cb(res)
  })
}

// 新增文章分类
const postCateAdd = (data, cb) => {
  axios.post(`/my/article/addcates`, data).then((res) => {
    cb(res)
  })
}
// 删除文章分类
// Id=>文章1的id =>
const getCateDeleById = (Id, cb) => {
  axios.get(`/my/article/deletecate/${Id}`).then((res) => {
    cb(res)
  })
}

// 编辑文章分类
const postCateEdit = (data, cb) => {
  axios.post(`/my/article/updatecate`, data).then((res) => {
    cb(res)
  })
}

// 发布新文章
// title	是	string	文章标题
// cate_id	是	int	所属分类 Id
// content	是	string	文章内容
// cover_img	是	blob二进制	文章封面
// state	是	string	状态，可选值为：已发布、草稿
// 注意!!!=>  请求体的格式是  formData类型 => 形参data对应的实参必须是formData类型

const postArticleAdd = (data, cb) => {
  axios.post(`/my/article/add`, data).then((res) => {
    cb(res)
  })
}
// 文章列表
// pagenum	是	int	页码值   1
// pagesize	是	int	每页显示多少条数据    2
// cate_id	否	string	文章分类的 Id
// state	否	string	文章的状态，可选值有：已发布、草稿
const getArticles = (data, cb) => {
  // params:{}
  axios
    .get(`/my/article/list`, {
      params: data,
    })
    .then((res) => {
      cb(res)
    })
}

//根据 Id 获取文章详情
const getArticleDetailById = (Id, cb) => {
  axios.get(`/my/article/${Id}`).then((res) => {
    cb(res)
  })
}

// 根据Id 修改文章
// formData
// Id	是	int	文章 Id
// title	是	string	文章标题
// cate_id	是	int	所属分类 Id
// content	是	string	文章内容
// cover_img	是	blob二进制	文章封面
// state	是	string	状态，可选值为：已发布、草稿
const postArticleEditById = (data, cb) => {
  axios.post(`/my/article/edit`, data).then((res) => {
    cb(res)
  })
}

const getArticleDelById = (Id, cb) => {
  axios.get(`/my/article/delete/${Id}`).then((res) => {
    cb(res)
  })
}

// const api = (cb) => {
//   axios(url).then((res) => {
//     cb(res)
//   })
// }


// 铺垫
// 上面的代码=> axios的.then =>  
// 解决方案之一(最基础的cb)
// 1. cb => 缺点(没啥不好的)=> 嵌套过深=>回调地狱=>{}太多了
// 解决方案之二 (ES7) async+await
// 2. 
// 示例代码
/*
const api =async ()=>{
  const res = await axios(url)
  
  return res
}
let result = api()
console.log(result)
*/
// 3. ....* yield



//  没有使用jq的ajax=>
// 主流库 axios  .then(()=>{})  =>  cb可以解决异步问题
// vue里面用的axios  为啥不用jq的ajax

